name: tests

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
    paths:
      # Run only when relevant files are modified
      - "trl/**.py"
      - "examples/**.py"
      - "scripts/**.py"
      - ".github/**.yml"
      - "tests/**.py"

jobs:
  check_code_quality:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9]

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
          submodules: recursive
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - uses: pre-commit/action@v2.0.3
        with:
          extra_args: --all-files

  tests:
    needs: check_code_quality
    strategy:
      matrix:
        python-version: ['3.8', '3.9', '3.10']
        os: ['ubuntu-latest', 'windows-latest']
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v3
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
        cache: "pip"
        cache-dependency-path: |
            setup.py
            requirements.txt
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        # cpu version of pytorch
        pip install -e ".[test, peft, diffusers]"
    - name: Test with pytest
      run: |
        make test

  tests_no_optional_dep:
    needs: check_code_quality
    runs-on: 'ubuntu-latest'
    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.9
      uses: actions/setup-python@v4
      with:
        python-version: '3.9'
        cache: "pip"
        cache-dependency-path: |
            setup.py
            requirements.txt
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        # cpu version of pytorch
        pip install .[test]
    - name: Test with pytest
      run: |
        make test
